home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / formats / iff / newiff.lzh / NewIFF / NewIFF.lzh / newiff / apps / ILBMtoRaw / ILBMtoRaw.c < prev   
C/C++ Source or Header  |  1992-05-18  |  5KB  |  176 lines

  1. /*--------------------------------------------------------------*/
  2. /*                                */
  3. /* ILBMtoRaw: reads in ILBM, writes out raw file (raw planes,     */
  4. /*  followed by colormap)                     */
  5. /*                                                              */
  6. /* Based on ILBMRaw.c by Jerry Morrison and Steve Shaw,        */
  7. /* Electronic Arts.                               */
  8. /* Jan 31, 1986                            */
  9. /*                                                              */
  10. /* This software is in the public domain.                       */
  11. /* This version for the Commodore-Amiga computer.               */
  12. /*                                                              */
  13. /*  Callable from CLI ONLY                    */
  14. /*  modified 05-91 for use wuth iffparse modules        */
  15. /*  Requires linkage with several other modules - see Makefile  */
  16. /*--------------------------------------------------------------*/
  17. #define INTUI_V36_NAMES_ONLY
  18.  
  19. #include "iffp/ilbmapp.h"
  20.  
  21. #ifdef LATTICE
  22. int CXBRK(void) { return(0); }  /* Disable Lattice CTRL/C handling */
  23. int chkabort(void) { return(0); }  /* really */
  24. #endif
  25.  
  26. char *vers = "$VER: ILBMtoRaw 37.9";
  27. char *Copyright = "ILBMtoRaw v37.9 (Freely Redistributable)";
  28.  
  29. void bye(UBYTE *s, int e);
  30. void cleanup(void);
  31.  
  32. LONG SaveBitMap(UBYTE *name, struct BitMap *bm, SHORT *cols, int ncols);
  33.  
  34. struct Library *IFFParseBase = NULL;
  35. struct Library *GfxBase = NULL;
  36.  
  37. /* ILBM frame */
  38. struct ILBMInfo ilbm = {0};
  39.  
  40.  
  41. /* ILBM Property chunks to be grabbed - BMHD and CMAP needed for this app
  42.  */
  43. LONG    ilbmprops[] = {
  44.         ID_ILBM, ID_BMHD,
  45.         ID_ILBM, ID_CMAP,
  46.         TAG_DONE
  47.         };
  48.  
  49. /* ILBM Collection chunks (more than one in file) to be gathered */
  50. LONG    *ilbmcollects = NULL;    /* none needed for this app */
  51.  
  52. /* ILBM Chunk to stop on */
  53. LONG    ilbmstops[] = {
  54.         ID_ILBM, ID_BODY,
  55.         TAG_DONE
  56.         };
  57.  
  58.  
  59. /** main() ******************************************************************/
  60.  
  61. void main(int argc, char **argv)
  62.     {
  63.     LONG error=NULL;
  64.     UBYTE *ilbmname, fname[80], buf[24];
  65.  
  66.     if ((argc < 2)||(argv[argc-1][0]=='?'))
  67.     bye("Usage from CLI: 'ILBMtoRaw filename'\n",RETURN_OK);
  68.     
  69.     if(!(GfxBase = OpenLibrary("graphics.library",0)))
  70.     bye("Can't open graphics.library",RETURN_FAIL);
  71.  
  72.     if(!(IFFParseBase = OpenLibrary("iffparse.library",0)))
  73.     bye("Can't open iffparse.library",RETURN_FAIL);
  74.  
  75. /*
  76.  * Here we set up default ILBMInfo fields for our
  77.  * application's frames.
  78.  * Above we have defined the propery and collection chunks
  79.  * we are interested in (some required like BMHD)
  80.  */
  81.     ilbm.ParseInfo.propchks      = ilbmprops;
  82.     ilbm.ParseInfo.collectchks   = ilbmcollects;
  83.     ilbm.ParseInfo.stopchks      = ilbmstops;
  84.     if(!(ilbm.ParseInfo.iff = AllocIFF()))
  85.         bye(IFFerr(IFFERR_NOMEM),RETURN_FAIL);    /* Alloc an IFFHandle */
  86.  
  87.     ilbmname = argv[1];
  88.  
  89.     /* Load as a brush since we don't need to display it */
  90.     if (error = loadbrush(&ilbm,ilbmname))
  91.         {
  92.         printf("Can't load ilbm \"%s\", ifferr=%s\n",ilbmname,IFFerr(error));
  93.         bye("",RETURN_WARN);
  94.         }
  95.     else /* Successfully loaded ILBM */
  96.     {
  97.         strcpy(fname,argv[1]);
  98.  
  99.     if(ilbm.camg & HAM)    strcat(fname, ".ham");
  100.     if(ilbm.camg & EXTRA_HALFBRITE)    strcat(fname, ".ehb");
  101.  
  102.     if(ilbm.camg & HIRES)    strcat(fname, ".hi");
  103.     else strcat(fname, ".lo");
  104.  
  105.     if(ilbm.camg & LACE)    strcat(fname, ".lace");
  106.  
  107.     strcat(fname,".");
  108.     sprintf(buf,"%d",ilbm.Bmhd.w);
  109.     strcat(fname,buf);
  110.     strcat(fname,"x");
  111.     sprintf(buf,"%d",ilbm.Bmhd.h);
  112.     strcat(fname,buf);
  113.     strcat(fname,"x");
  114.     sprintf(buf,"%d",ilbm.brbitmap->Depth);
  115.     strcat(fname, buf);
  116.     printf(" Creating file %s \n", fname);
  117.     error=SaveBitMap(fname, ilbm.brbitmap, ilbm.colortable, ilbm.ncolors);
  118.  
  119.     unloadbrush(&ilbm);
  120.     }
  121.  
  122.     if(error)    bye(IFFerr(error),RETURN_WARN);
  123.     else    bye("",RETURN_OK);
  124.     }
  125.  
  126.  
  127. /* SaveBitMap (as raw planes and colortable)
  128.  *
  129.  * Given filename, bitmap structure, and colortable pointer,
  130.  * writes out raw bitplanes and colortable (not an ILBM)
  131.  * Returns 0 for success
  132.  */
  133.  
  134.  
  135. LONG SaveBitMap(UBYTE *name, struct BitMap *bm, SHORT *cols, int ncols)
  136.     {
  137.     SHORT i;
  138.     LONG nb,plsize;
  139.  
  140.     LONG file = Open( name, MODE_NEWFILE);
  141.     if( file == 0 )
  142.     {
  143.     printf(" couldn't open %s \n",name);
  144.     return(CLIENT_ERROR);    /* couldnt open a load-file */    
  145.     }
  146.     plsize = bm->BytesPerRow*bm->Rows;
  147.     for (i=0; i<bm->Depth; i++)
  148.     {
  149.     nb =  Write(file, bm->Planes[i], plsize);
  150.     if (nb<plsize) break;
  151.     }
  152.     if(nb>0)    nb=Write(file, cols, (1<<bm->Depth)*2);    /* save color map */
  153.     Close(file);
  154.     return(nb >= 0 ? 0L : IFFERR_WRITE);
  155.     }
  156.  
  157. void bye(UBYTE *s, int e)
  158.     {
  159.     if(s&&(*s))    printf("%s\n",s);
  160.     cleanup();
  161.     exit(e);
  162.     }
  163.  
  164. void cleanup()
  165.     {
  166.     if(ilbm.ParseInfo.iff)        FreeIFF(ilbm.ParseInfo.iff);
  167.  
  168.     if(IFFParseBase)    CloseLibrary(IFFParseBase);
  169.     if(GfxBase)        CloseLibrary(GfxBase);
  170.     }
  171.  
  172.  
  173.  
  174.  
  175.  
  176.